const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

// 获取所有分类
exports.getAllCategories = async (req, res) => {
  try {
    const categories = await prisma.category.findMany({
      orderBy: { id: 'asc' }
    });
    
    res.json({
      status: 'success',
      data: categories
    });
  } catch (error) {
    console.error('获取分类失败:', error);
    res.status(500).json({
      status: 'error',
      message: '获取分类失败',
      error: error.message
    });
  }
};

// 获取单个分类
exports.getCategoryById = async (req, res) => {
  try {
    const { id } = req.params;
    
    const category = await prisma.category.findUnique({
      where: { id: Number(id) }
    });
    
    if (!category) {
      return res.status(404).json({
        status: 'error',
        message: '分类不存在'
      });
    }
    
    res.json({
      status: 'success',
      data: category
    });
  } catch (error) {
    console.error('获取分类详情失败:', error);
    res.status(500).json({
      status: 'error',
      message: '获取分类详情失败',
      error: error.message
    });
  }
};

// 创建分类
exports.createCategory = async (req, res) => {
  try {
    const { name, desc } = req.body;
    
    // 验证数据
    if (!name) {
      return res.status(400).json({
        status: 'error',
        message: '分类名称为必填项'
      });
    }
    
    // 验证重复
    const existingCategory = await prisma.category.findFirst({
      where: { name }
    });
    
    if (existingCategory) {
      return res.status(400).json({
        status: 'error',
        message: '分类名称已存在'
      });
    }
    
    // 创建分类
    const category = await prisma.category.create({
      data: {
        name,
        desc
      }
    });
    
    res.status(201).json({
      status: 'success',
      message: '分类创建成功',
      data: category
    });
  } catch (error) {
    console.error('创建分类失败:', error);
    res.status(500).json({
      status: 'error',
      message: '创建分类失败',
      error: error.message
    });
  }
};

// 更新分类
exports.updateCategory = async (req, res) => {
  try {
    const { id } = req.params;
    const { name, desc } = req.body;
    
    // 验证分类是否存在
    const existingCategory = await prisma.category.findUnique({
      where: { id: Number(id) }
    });
    
    if (!existingCategory) {
      return res.status(404).json({
        status: 'error',
        message: '分类不存在'
      });
    }
    
    // 验证名称是否重复
    if (name && name !== existingCategory.name) {
      const duplicateCategory = await prisma.category.findFirst({
        where: { 
          name,
          id: { not: Number(id) }
        }
      });
      
      if (duplicateCategory) {
        return res.status(400).json({
          status: 'error',
          message: '分类名称已存在'
        });
      }
    }
    
    // 更新分类
    const category = await prisma.category.update({
      where: { id: Number(id) },
      data: {
        name: name || existingCategory.name,
        desc: desc !== undefined ? desc : existingCategory.desc
      }
    });
    
    res.json({
      status: 'success',
      message: '分类更新成功',
      data: category
    });
  } catch (error) {
    console.error('更新分类失败:', error);
    res.status(500).json({
      status: 'error',
      message: '更新分类失败',
      error: error.message
    });
  }
};

// 删除分类
exports.deleteCategory = async (req, res) => {
  try {
    const { id } = req.params;
    
    // 验证分类是否存在
    const existingCategory = await prisma.category.findUnique({
      where: { id: Number(id) }
    });
    
    if (!existingCategory) {
      return res.status(404).json({
        status: 'error',
        message: '分类不存在'
      });
    }
    
    // 检查是否有商品使用该分类
    const productsCount = await prisma.product.count({
      where: { categoryId: Number(id) }
    });
    
    if (productsCount > 0) {
      return res.status(400).json({
        status: 'error',
        message: `无法删除分类，该分类下有${productsCount}个商品`
      });
    }
    
    // 删除分类
    await prisma.category.delete({
      where: { id: Number(id) }
    });
    
    res.json({
      status: 'success',
      message: '分类删除成功'
    });
  } catch (error) {
    console.error('删除分类失败:', error);
    res.status(500).json({
      status: 'error',
      message: '删除分类失败',
      error: error.message
    });
  }
}; 